/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.report.servlet;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import co.gov.medellin.sdep.sisdep.common.AppConstants;
import co.gov.medellin.sdep.sisdep.common.OracleHelper;
import co.gov.medellin.sdep.sisdep.common.SpringAppContext;
import co.gov.medellin.sdep.sisdep.domain.BaseController;
import co.gov.medellin.sdep.sisdep.domain.FacesController;
import co.gov.medellin.sdep.sisdep.domain.MessageModalWindowController;
import co.gov.medellin.sdep.sisdep.domain.cco.AcuerdoConvivenciaController;
import co.gov.medellin.sdep.sisdep.domain.cco.AgendaController;
import co.gov.medellin.sdep.sisdep.domain.cco.CentroComercialController;
import co.gov.medellin.sdep.sisdep.domain.cco.EncuestaController;
import co.gov.medellin.sdep.sisdep.domain.cco.LocalEntregaController;
import co.gov.medellin.sdep.sisdep.domain.cco.SeguimientoPlanController;
import co.gov.medellin.sdep.sisdep.domain.gestion.VisitaAdministrativaController;
import co.gov.medellin.sdep.sisdep.domain.operativa.OperDesmonteRetController;
import co.gov.medellin.sdep.sisdep.domain.operativa.OperativoController;
import co.gov.medellin.sdep.sisdep.domain.regulacion.ReporteRegulacionController;
import co.gov.medellin.sdep.sisdep.gestion.dto.VisitaAdministrativaDTO;

import com.lowagie.text.pdf.PdfWriter;


/**
 * <p>
 * Servlet utilizado para el procesamiento y generacion de reportes SISDEP. 
 * </p>
 * <p>
 * Copyright (c) 2012<BR>
 * Consult-Soft S.A.<BR>
 * Created on: Jun 4, 2012<BR>
 * 
 * @author atabares
 * </p>
 */
public class ReportController extends HttpServlet {

	/** Serial key. */
	private static final long serialVersionUID = -1593218156749067768L;
	
	/** Mensaje usado usado en los fallos de generacion de reporte. */
	public static final String REPORT_FAIL = " Error generando el reporte, asegurese que hayan registros que coincidan con los criterios de busqueda";
	
	/**
	 * Obtiene la informacion basica para el reporte que se va a generar, tal como la plantilla de reporte
	 * a utilizar, su ubicacion y el tipo de archivo a generar. 
	 * @param request 
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void processRequest(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		try {
			HashMap parametersMap = new HashMap(1);
			String reportName = request.getParameter("reportName").trim();
			String reportType = request.getParameter("format");
			
			String filepath = request.getRealPath("/reports/") + File.separator + reportName + ".jasper";
			
			if (reportType.equals("pdf")) {
				generatePdfReport(request, response, filepath, parametersMap);
			} else if (reportType.equals("xls")) {
				generateXlsReport(request, response, filepath, parametersMap);
			}
		} catch (Exception e) {
			e.printStackTrace(System.err);
		}
	}

	/**
	 * Configura los parametros generales usados en SISDEP para reportes en formato PDF.
	 * @param request
	 * @param response
	 * @param filepath
	 * @param parametersMap
	 * @throws ServletException
	 * @throws IOException
	 * @throws java.text.ParseException 
	 */
	private void generatePdfReport(HttpServletRequest request, HttpServletResponse response, String filepath, Map parametersMap) 
			throws ServletException, IOException, java.text.ParseException {
		
		try {
			JasperPrint jasperPrint = null;
			Date currentDate = new Date();
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
			String stringDate = dateFormat.format(currentDate);
			String reportName = request.getParameter("reportName").trim();
			ServletOutputStream ouputStream = response.getOutputStream();
			JRPdfExporter exporter = new JRPdfExporter();

			response.setContentType("application/pdf");
			response.addHeader("Content-disposition", "filename=\"" + reportName + "_" + stringDate + ".pdf\"");
			
			if (reportName.equals("visitaAdministrativaPDF")) {
				jasperPrint = createVisitAdminReport(request, filepath, parametersMap);
			} else if (reportName.startsWith("reporteCiante")) {
				jasperPrint = createSellerReport(request, filepath, parametersMap);
			} else if (reportName.startsWith("reporteCCOEncuestaPDF")) {
				jasperPrint = createCCOEncuestaReport(request, filepath, parametersMap);			
			} else if (reportName.startsWith("reporteCCOAgendaPDF")) {
				jasperPrint = createCCOAgendaReport(request, filepath, parametersMap);
			} else if (reportName.startsWith("reporteAcuerdoConvivenciaPDF")) {
				jasperPrint = createCCOAcuerdoReport(request, filepath, parametersMap);
			} else if (reportName.startsWith("reporteCCOSeguimientoPDF")) {
				jasperPrint = createCCOSeguimientoReport(request, filepath, parametersMap);
			} else if (reportName.startsWith("reporteCCOEntregaLocalPDF")) {
				jasperPrint = createCCOEntregaLocalReport(request, filepath, parametersMap);
			}

			
			if (jasperPrint.getPages().isEmpty()) {
				throw new JRException(ReportController.REPORT_FAIL);
			}
			
			exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);
			exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, ouputStream);
			exporter.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, "Reporte.pdf");
			exporter.setParameter(JRPdfExporterParameter.PERMISSIONS, new Integer(PdfWriter.HideMenubar));
			exporter.setParameter(JRPdfExporterParameter.PERMISSIONS, new Integer(PdfWriter.HideToolbar));
			exporter.setParameter(JRPdfExporterParameter.PERMISSIONS, new Integer(PdfWriter.HideWindowUI));

			exporter.exportReport();
			ouputStream.flush();
			ouputStream.close();
		} catch (JRException e) {
			e.printStackTrace(System.err);
			
			((MessageModalWindowController) BaseController.getBeanInstance(AppConstants.MESSAGE_CONTROLLER_BEAN))
				.setErrorMessage(ReportController.REPORT_FAIL + e.getMessage(), null, null);
		} catch (SQLException e) {
			e.printStackTrace(System.err);
			
			((MessageModalWindowController) BaseController.getBeanInstance(AppConstants.MESSAGE_CONTROLLER_BEAN))
				.setErrorMessage(ReportController.REPORT_FAIL + e.getMessage(), null, null);
		}
	}
	
	/**
	 * Configura los parametros generales usados en SISDEP para reportes en formato XLS.
	 * @param request
	 * @param response
	 * @param filepath
	 * @param parametersMap
	 * @throws ServletException
	 * @throws IOException
	 * @throws ParseException 
	 */
	private void generateXlsReport(HttpServletRequest request, HttpServletResponse response, String filepath, Map parametersMap) 
			throws ServletException, IOException, ParseException {
		
		try {
			JasperPrint jasperPrint = null;
			Date currentDate = new Date();
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
			String stringDate = dateFormat.format(currentDate);
			String reportName = request.getParameter("reportName").trim();
			ServletOutputStream ouputStream = response.getOutputStream();
			JRXlsExporter exporterXLS = new JRXlsExporter();
			
			response.setContentType("application/vnd.ms-excel");
			response.addHeader("Content-disposition", "filename=\"" + reportName + "_" + stringDate + ".xls\"");
			response.setHeader("Expires", "0");
			response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
			
			if (reportName.equals("reporteOperativosXLS")) {
				jasperPrint = createOperativeReport(request, filepath, parametersMap);
			} else if (reportName.startsWith("reporteRetencionesXLS")) {
				jasperPrint = createRetentionsReport(request, filepath, parametersMap);
			} else if (reportName.startsWith("reporteNumLocalesCCOXLS")) {
				jasperPrint = createNumLocalesCCOReport(request, filepath, parametersMap);									
			} else if (reportName.startsWith("reporteOperativosXLS")) {
				jasperPrint = createOperativeReport(request, filepath, parametersMap);
			} else if (reportName.startsWith("reporteNumLocalesDispCCOXLS")) {
				jasperPrint = createNumLocalesCCODisponiblesReport(request, filepath, parametersMap); 
			} else if (reportName.startsWith("reporteLocalesPersonaCCOXLS")) {
				jasperPrint = createLocalesPersonaCCOReport(request, filepath, parametersMap); 
			}else if (reportName.startsWith("reporteLocalesDispCCOXLS")) {
				jasperPrint = createLocalesCCODisponiblesReport(request, filepath, parametersMap); 
			}
			
			exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
			exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, ouputStream);
			//este parametro es para decirle que todo el reporte se genera en una sola  hoja de excel
			exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.TRUE);			
			//Este es para que no use un fondo blanco
			exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.FALSE);			
			
			exporterXLS.exportReport();
			ouputStream.flush();
			ouputStream.close();
		} catch (JRException e) {
			e.printStackTrace(System.err);
			
			((MessageModalWindowController) BaseController.getBeanInstance(AppConstants.MESSAGE_CONTROLLER_BEAN))
				.setErrorMessage(ReportController.REPORT_FAIL + e.getMessage(), null, null);
		}
	}

	/**
	 * Obtiene y asigna la informacion que conformara el reporte de visita administrativa.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException
	 * @throws MalformedURLException
	 */
	private JasperPrint createVisitAdminReport(HttpServletRequest request, String realPath, Map parametersMap) 
	        throws JRException, MalformedURLException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;
		
		parametersMap.put("report-name", "Visita_Administrativa_");
		parametersMap.put("HEADER_LOGO_PATH", imagesDir + "reportsHeader.png");
		
		VisitaAdministrativaController visitaAdministrativaController = 
				(VisitaAdministrativaController) session.getAttribute("visitaAdministrativaController");
		
		reportData = (Collection) visitaAdministrativaController.getReportCollection();
		
		// ESTAS LINEAS SON TEMPORALES MIENTRAS SE AJUSTA KM.
		// **************************************************
		VisitaAdministrativaDTO visita = (VisitaAdministrativaDTO)reportData.iterator().next();
		visita.setRegistroGraficoSector(imagesDir + "mapa.jpg");
		visita.setRegistroFotograficoSector(imagesDir + "foto.jpg");
		Collection listTemp = new ArrayList();
		listTemp.add(visita);
		reportData = listTemp;
		// **************************************************
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}

	/**
	 * Obtiene y asigna la informacion que servira para generar el reporte de comerciantes.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException
	 * @throws MalformedURLException
	 * @throws java.text.ParseException 
	 * @throws SQLException 
	 */
	private JasperPrint createSellerReport(HttpServletRequest request, String realPath, Map parametersMap) 
	        throws JRException, MalformedURLException, java.text.ParseException, SQLException {
		
		JasperPrint jasperPrint = null;
		String reportType = null;
		String initDate = null;
		String endDate = null;
		Connection connect = null;
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;
		
		ReporteRegulacionController reporteRegulacionController = 
				(ReporteRegulacionController) session.getAttribute("reporteRegulacionController");
		
		reportType = (String) reporteRegulacionController.getReportType();
		initDate = (String) reporteRegulacionController.getInitDate();
		endDate = (String) reporteRegulacionController.getEndDate();
		
		parametersMap.put("report-name", "Comerciante_" + reportType);
		parametersMap.put("HEADER_LOGO_PATH", imagesDir + "reportsHeader.png");
		parametersMap.put("FECHA_ACTUAL", new java.sql.Timestamp(new Date().getTime()));
		parametersMap.put("FECHA_INI", (Timestamp) OracleHelper.string2timeStamp(initDate));
		parametersMap.put("FECHA_FIN", (Timestamp) OracleHelper.string2timeStamp(endDate));
		
		try {
			connect = getSISDEPConnection();

			jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, connect);
		} catch (Exception e) {
			e.printStackTrace(System.err);
		} finally {
			connect.close();
		}
		
		return jasperPrint;
	}

	/**
	 * Obtiene y asigna la informacion que servira para generar una encuesta en PDF.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException
	 * @throws MalformedURLException
	 * @throws java.text.ParseException 
	 * @throws SQLException 
	 */
	private JasperPrint createCCOEncuestaReport(HttpServletRequest request, String realPath, Map parametersMap) 
	        throws JRException, MalformedURLException, java.text.ParseException, SQLException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;		
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;
		
		parametersMap.put("report-name", "Encuesta_Centro_Comercial");
		parametersMap.put("HEADER_LOGO_PATH", imagesDir + "reportsHeader.png");
		
		EncuestaController encuestaController = 
				(EncuestaController) session.getAttribute("encuestaController");
		
		DataModel dataModel = encuestaController.getPreguntasEncuestaListModel();
		
		reportData = (Collection) dataModel.getWrappedData();				
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}
	


	/**
	 * Obtiene y asigna la informacion que servira para generar la agenda de un Centro Comercial en PDF.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException
	 * @throws MalformedURLException
	 * @throws java.text.ParseException 
	 * @throws SQLException 
	 */
	private JasperPrint createCCOAgendaReport(HttpServletRequest request, String realPath, Map parametersMap) 
	        throws JRException, MalformedURLException, java.text.ParseException, SQLException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;		
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;
		
		parametersMap.put("report-name", "Agenda_Centro_Comercial");
		parametersMap.put("HEADER_LOGO_PATH", imagesDir + "reportsHeader.png");
		
		AgendaController agendaController = 
				(AgendaController) session.getAttribute("agendaController");
		
		DataModel dataModel = agendaController.getActividadesAgendaListModel();
		
		reportData = (Collection) dataModel.getWrappedData();				
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}
	

	/**
	 * Obtiene y asigna la informacion que servira para generar el acuerdo de convivencia en PDF.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException
	 * @throws MalformedURLException
	 * @throws java.text.ParseException 
	 * @throws SQLException 
	 */	
	private JasperPrint createCCOAcuerdoReport(HttpServletRequest request, String realPath, Map parametersMap) 
    throws JRException, MalformedURLException, java.text.ParseException, SQLException {

		JasperPrint jasperPrint = null;
		Collection reportData = null;		
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;
		
		parametersMap.put("report-name", "Acuerdo_de_Convivencia");
		parametersMap.put("HEADER_LOGO_PATH", imagesDir + "reportsHeader.png");
		
		AcuerdoConvivenciaController acuerdoConvivenciaController = 
				(AcuerdoConvivenciaController) session.getAttribute("acuerdoConvivenciaController");
		
		DataModel dataModel = acuerdoConvivenciaController.getAcuerdoConvivenciaReportListModel();
		
		reportData = (Collection) dataModel.getWrappedData();				
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}
		
	/**
	 * Obtiene y asigna la informacion que servira para generar el acuerdo de convivencia en PDF.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException
	 * @throws MalformedURLException
	 * @throws java.text.ParseException 
	 * @throws SQLException 
	 */	
	private JasperPrint createCCOSeguimientoReport(HttpServletRequest request, String realPath, Map parametersMap) 
    throws JRException, MalformedURLException, java.text.ParseException, SQLException {

		JasperPrint jasperPrint = null;
		Collection reportData = null;		
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;
		
		parametersMap.put("report-name", "Acuerdo_de_Convivencia");
		parametersMap.put("HEADER_LOGO_PATH", imagesDir + "reportsHeader.png");
		
		SeguimientoPlanController seguimientoPlanController = 
				(SeguimientoPlanController) session.getAttribute("seguimientoPlanController");
		
		DataModel dataModel = seguimientoPlanController.getSeguimientoReportListModel();
		
		reportData = (Collection) dataModel.getWrappedData();				
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}
	
	/**
	 * Obtiene y asigna la informacion que servira para generar el informe de la entrega del local en PDF.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException
	 * @throws MalformedURLException
	 * @throws java.text.ParseException 
	 * @throws SQLException 
	 */	
	private JasperPrint createCCOEntregaLocalReport(HttpServletRequest request, String realPath, Map parametersMap) 
    throws JRException, MalformedURLException, java.text.ParseException, SQLException {

		JasperPrint jasperPrint = null;
		Collection reportData = null;		
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;
		
		parametersMap.put("report-name", "Entrega_de_Local");
		parametersMap.put("HEADER_LOGO_PATH", imagesDir + "reportsHeader.png");
		
		LocalEntregaController localEntregaController = 
				(LocalEntregaController) session.getAttribute("localEntregaController");
		
		DataModel dataModel = localEntregaController.getEntregaLocalReportListModel();
		
		reportData = (Collection) dataModel.getWrappedData();				
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}	
			
	/**
	 * Obtiene y asigna la informacion que servira para generar el reporte de operativos.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException
	 */
	private JasperPrint createOperativeReport(HttpServletRequest request, String realPath, Map parametersMap) throws JRException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;
		HttpSession session = request.getSession();

		OperativoController operativoController = 
				(OperativoController) session.getAttribute("operativoController");
		
		DataModel dataModel = operativoController.getOperativoListModel();
		
		reportData = (Collection) dataModel.getWrappedData();
		parametersMap.put("report-name", "Operativos");

		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}
	
	/**
	 * Obtiene y asigna la informacion que conformara el reporte de visita administrativa.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException 
	 */
	private JasperPrint createRetentionsReport(HttpServletRequest request, String realPath, Map parametersMap) throws JRException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;
		HttpSession session = request.getSession();

		OperDesmonteRetController operDesmonteRetController = 
				(OperDesmonteRetController) session.getAttribute("operdesmonteretController");
		
		DataModel dataModel = operDesmonteRetController.getOperdesmonteretListModel();
		
		reportData = (Collection) dataModel.getWrappedData();
		parametersMap.put("report-name", "Retenciones");

		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}
	
	
	/**
	 * Obtiene y asigna la informacion que conformara el reporte de visita administrativa.
	 * @param request
	 * @param realPath
	 * @param parametersMap
	 * @return Objeto JasperPrint que contiene toda la informacion del reporte generado.
	 * @throws JRException 
	 */
	private JasperPrint createNumLocalesCCOReport(HttpServletRequest request, String realPath, Map parametersMap) throws JRException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;

		CentroComercialController centroComercialController = 
				(CentroComercialController) session.getAttribute("centroComercialController");
				
		DataModel dataModel =  centroComercialController.getNumeroLocalesCentroComercialListModel();
		
		reportData = (Collection) dataModel.getWrappedData();		
				
		parametersMap.put("report-name", "Numero_Locales_por_Centro_Comercial");
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}	
	
	private JasperPrint createNumLocalesCCODisponiblesReport(HttpServletRequest request, String realPath, Map parametersMap) throws JRException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;

		CentroComercialController centroComercialController = 
				(CentroComercialController) session.getAttribute("centroComercialController");
				
		DataModel dataModel =  centroComercialController.getNumeroLocalesDispCentroComercialListModel();
		
		reportData = (Collection) dataModel.getWrappedData();		
				
		parametersMap.put("report-name", "Numero_Locales_Dispo_Centro_Comercial");
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}		
	
	private JasperPrint createLocalesPersonaCCOReport(HttpServletRequest request, String realPath, Map parametersMap) throws JRException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;

		CentroComercialController centroComercialController = 
				(CentroComercialController) session.getAttribute("centroComercialController");
				
		DataModel dataModel =  centroComercialController.getLocalesPersonaCentroComercialListModel();
		
		reportData = (Collection) dataModel.getWrappedData();		
				
		parametersMap.put("report-name", "Personas_Locales_Centro_Comercial");
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}	
	
	private JasperPrint createLocalesCCODisponiblesReport(HttpServletRequest request, String realPath, Map parametersMap) throws JRException {
		
		JasperPrint jasperPrint = null;
		Collection reportData = null;
		HttpSession session = request.getSession();
		String imagesDir = request.getRealPath("/images/") + File.separator;

		CentroComercialController centroComercialController = 
				(CentroComercialController) session.getAttribute("centroComercialController");
				
		DataModel dataModel =  centroComercialController.getLocalesDispCentroComercialListModel();
		
		reportData = (Collection) dataModel.getWrappedData();		
				
		parametersMap.put("report-name", "Locales_Dispo_Centro_Comercial");
		
		jasperPrint = JasperFillManager.fillReport(realPath, parametersMap, new JRBeanCollectionDataSource(reportData));
		
		return jasperPrint;
	}		
	/**
	 * Metodo que obtiene la conexion a la base de datos SISDEP.
	 * @throws SQLException 
	 */
	private Connection getSISDEPConnection() throws SQLException {
		DataSource dataSource = ((DataSourceTransactionManager) SpringAppContext.getBean("transactionManager")).getDataSource();
		
		return (Connection) dataSource.getConnection();
	}
	
	/**
	 * Metodo GET usado para procesar la llamada a la generacion del reporte
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * Metodo POST usado para procesar la llamada a la generacion del reporte
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		processRequest(request, response);
	}
}
